Arduino小车系列1 [胡萝卜创客]

您所在的位置:网站首页 arduino uart通信 Arduino小车系列1 [胡萝卜创客]

Arduino小车系列1 [胡萝卜创客]

#Arduino小车系列1 [胡萝卜创客]| 来源: 网络整理| 查看: 265

写在前面

为什么要写这样一系列文章,网上很早就有并且还很多此类文章了呀,对于电子相关专业的人分分钟可以搞定的事呀。但,我要写一个和那些文章视角不同的系列,就是我的文章的目标读者是小白人士,可以是各行业对编程和电子硬件都不了解的人,可以是正在小学初中读书的学生。让这些人,通过价格低廉、资料丰富的开源硬件和编程来做一些有意思的事情。

做个什么样的小车

目标是一个小车平台,后续可以基于这个平台做巡线小车、语音小车、监控小车等等有意思的事情。这样的话,我选择了4个轮子车架,空间更大。通过arduino板子控制小车,原因是arduino产品丰富,高中低端都有,可以使用价格很低的arduino的pro mini或nano,便宜的10几块钱就可以搞到。并且arduino的资料是相当丰富了,基于它做小车的教程也好多。通信模块选择zigbee,比蓝牙的障碍物穿透性好,隔一堵墙是没有问题的,正好手里有这样的板子,很容易上手。

Step By Step 最基础的车架,我选择了最常见的亚克力材料树莓派小车车架购买链接(42元购入)。包括了4个直流电机,1个18650电池的3节电池盒。这个小车底盘可以多层,也有安装树莓派的地方,当时就是冲着这些可扩展性买的。提醒一点:这个底盘组装并不容易,安装电机的卡槽不是很吻合,我使了好大力气才完成。 小车底盘 第二层车架,用来安装电池盒、控制器、L298N等。 第二层车架 使用L298N电机驱动板购买链接(7.9元入手)。它有两个作用,一是连接控制器和电机,达到控制器编程控制电机的目的。二是把12V的输入降压为5V输出,用来给控制器Zduino供电。具体硬件连接:OUT1连接左侧两个电机的负极,OUT2连接左侧两个电机的正极。OUT3连接右侧两个电机的正极,OUT4连接右侧两个电机的负极。 L298N本身的供电,它的输入是5V-35V,我选择12V的电源输入。使用3节18650电池购买链接(每节4.9元入手,一节3.7V)串联得到约12V输入。说明:这个电池可以充电,多次使用,绿色环保。相关配套:18650电池充电器购买链接(8.5元),18650电池盒(3节串联,和小车底盘一并购入)购买链接。 L298N 控制器选择Zduino pro mini购买链接(28元入,它属于Arduino Pro Mini类型)。这款控制器用来控制电机和控制通信模块,可以对它进行编程。 Zduino pro mini Zduino本身的供电,它的输入电压是5V,这里使用L298N的5V输出。说一个惨痛经历:在前一天,使用12v电源给Zduino pro mini供电,可以驱动两个电机转动。今天同样连线,通电后电机也转动了一下,然后就不转了,同时闻到焦味,一摸Zduino芯片烫手,看来是板子烧了。然后,尝试使用USB串口写入程序,发现烧录程序失败,看来结果就是这样了。分析原因,第二次使用时,电池是充满了电的,电压达到了12V,之前电池虚电并没有12V那么高。 控制电机使用了引脚5,6,9,10, 它们依次连接L298N的IN1,IN2,IN3,IN4这4个输入,IN1和IN2控制输出OUT1和OUT2,IN3和IN4控制输出OUT3和OUT4。

控制ZigBee模块(下图1),有两点,一是给Zigbee模块供电(Zduino输出电压5V,Zigbee模块输入电压3.3V,故用降压板),二是与Zigbee模块通过串口进行通信。具体连线是:Zduino的VCC,GND,RXI,TXO依次连接Zigbee模块的降压板(下图2)的5V,GND,引脚1,引脚2,降压板的3V3,GND,引脚1,引脚2依次连接Zigbee板的VCC,GND,Tx,Rx。说明一下,串口的连接也就是RXI和TXO,需要对调连接,即RXI连接Tx,TXO连接Rx。这里的名字不太一致,命名规范问题,功能是一样的。

Zigbee 降压板 其他硬件还包括杜邦线,小车还是比较紧凑的,不需要太长的杜邦线,否则显得凌乱,10cm以内刚刚好。杜邦线分为公对公,母对母,公对母,每种都采购一些,非常便宜。面包板,有了它,可以把Zduino的引脚扩展出来,可以很方便与其他硬件模块连接,电源的连接也会方便很多,最大的好处,就是让我们的小车显得很清爽,不至于邋遢。 小车最终形象

我又重新按照上面文章的步骤,重新组装了一遍小车,一次成功。

whole2.png whole1.png 整体原理介绍

L298N用来控制4个电机,比如,向前转、向后转,左侧轮子向前转而右侧向后转,从而实现向右转弯,控制电机转速快慢。但是,光有L298N是完不成这么多复杂动作的,它只是执行具体任务的小兵,还需要一个指挥官来指挥它才行。这个指挥官就是arduino板子,它可以支持编写程序,通过程序来给L298N下发指令,叫它完成响应的动作。arduino板子程序编写完成后,这个指挥官就有了一些控制电机的技能了。但是,我们希望可以再指挥arduino这个指挥官,比如,我说“启动”,它就让小车开动起来;我说“停止”,它就让小车停下来。要想arduino这个指挥官可以随时听从我的指挥,就需要zigbee这个通讯员了,它可以进行无线数据传输,我们就可以把我们的指令通过zigbee告诉给arduino这个指挥官了。

软件编程 本文对应的Arduino代码github地址 // hardware:Zduino pro mini //Zduino pro mini only has one serial. // this program is used to control car // zigbee as communication protocol throgh DL-LN33 unsigned char returnFlag[8] = {0xfe, 0x05, 0x91, 0x90, 0x14, 0x10, 0x01, 0xff}; int input1 = 5; // 定义uno的pin 5 向 input1 输出 int input2 = 6; // 定义uno的pin 6 向 input2 输出 int input3 = 9; // 定义uno的pin 9 向 input3 输出 int input4 = 10; // 定义uno的pin 10 向 input4 输出 int carState = 1; void setup() { Serial.begin(115200); //RX TX serial port pinMode(LED_BUILTIN, OUTPUT); pinMode(8, OUTPUT); //初始化各IO,模式为OUTPUT 输出模式 pinMode(input1,OUTPUT); pinMode(input2,OUTPUT); pinMode(input3,OUTPUT); pinMode(input4,OUTPUT); } String myPtHex(int g){ // 把 g 最右邊 byte 印成 Hex 倆位 String ret = ""; int a = g& 0xf0; // 左邊 4 bits a = a >> 4; // 右移 4 bits int b = g& 0x0f; // 右邊 4 bits char c = a < 10 ? a + '0' : a + 'A' - 10; // Serial.print(c); ret += c; c = b < 10 ? b + '0' : b + 'A' - 10; // Serial.print(c); ret += c; // Serial.print("#" + ret + "#"); return ret; } void blinkLed(int pinNumber){ digitalWrite(pinNumber, HIGH); delay(1); digitalWrite(pinNumber, LOW); } void loop() { // have zigbee data to come int dataIndex = 1; if (Serial.available()) { digitalWrite(LED_BUILTIN, HIGH); //send back to zigbee board. // Serial.write(returnFlag, 8); myPtHex((char)Serial.read()); dataIndex ++; while(Serial.available()){ String dataFlag = myPtHex((char)Serial.read()); if(dataIndex == 7){ // Serial.print("$"+dataFlag); //if zigbee send data 01, start car. if(dataFlag == "01"){ blinkLed(8); carState = 1; } // if zigbee send data 00, start car. if(dataFlag == "00"){ blinkLed(8); carState = 0; } } dataIndex ++; } digitalWrite(LED_BUILTIN, LOW); } if(carState == 0){ stopCar(); } if(carState == 1){ startCar(); } } void startCar(){ //forward 向前转 digitalWrite(input1,HIGH); //给高电平 digitalWrite(input2,LOW); //给低电平 digitalWrite(input3,HIGH); //给高电平 digitalWrite(input4,LOW); //给低电平 delay(1000); //延时0.5秒 } void stopCar(){ digitalWrite(input1,LOW); digitalWrite(input2,LOW); digitalWrite(input3,LOW); digitalWrite(input4,LOW); delay(1000); //延时0.5秒 } 以上程序如何烧录到Zduino板子中呢,需要两个工具,一是需要一个硬件USB转串口模块购买地址(25元购入,现在12.5元)。二是需要Arduino的开发工具Arduino IDE下载地址。

USB转串口模块和Zduino的连线方式,该模块的GND,VCC,DTR/RTS,TX,RX依次连接Zduino的GND,VCC,DTR,RXI,TXO。

USB转串口模块连接

打开Arduino IDE,点击IDE的菜单:工具(tools)-->开发板(board),选择Arduino Pro or Pro Mini,然后点击这个菜单的下一个:端口(port),选择/dev/ttyUSB0。

Arduino_IDE.png

把上面的代码粘贴到编辑区,点击菜单:项目-->上传。

上传成功.png

电池通电,4个强劲的轮子转起来

微信公众号:huluobospace(胡萝卜创客)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3